|
'[Programming]/Visual C++ API/MFC'에 해당되는 글 36건
[폭주기관차, 2008/03/12 15:18, [Programming]/Visual C++ API/MFC]
MFC에서 List Control(리스트 컨트롤)의 특정 위치를 선택하는 함수를 구현해보았다.
void SetLlistCtrlSelected(CListCtrl *pCtrl, int uid) { pCtrl->SetItemState( uid, LVIS_SELECTED, LVIS_SELECTED ); // 회색 됨 pCtrl->EnsureVisible( uid, FALSE ); // 스크롤 pCtrl->SetFocus(); // 파랗게 만들기 } 매개변수 : pCtrl은 List Control의 포인터. uid는 선택을 할 목록의 자리이다. 즉, 몇 번째 자리를 선택할지 여부이다. 설명 : SetIteamState란 함수로 uid번째의 아이템을 선택하도록 한다. 이 함수만 수행하면 아마 회색(포커스가 없는) 상태가 된다. 그래서 SetFocus란 함수를 이용하여 파란색(윈도우 설정마다 다르겠지만, 포커가 있는) 상태로 만든다. 그 중간의 EnsureVisble은 선택하려는 컬럼이 스크롤 밑에 있을 경우 그 쪽으로 이동시켜주는 역할을 한다. 다이알로그 창이 뜰 때 초기 선택할 값으로 이용할때 사용하면 좋다. 참고 : 메모장_MFC의 글 Trackback Address :: http://kongmks.cafe24.com/trackback/282
[폭주기관차, 2008/01/16 13:50, [Programming]/Visual C++ API/MFC]
Windows의 창을 조절하는 기능 중에서 최소한 어느정도 이하로는,
초대한 어느정도까지만 확대를 할 수 있도록 하고 싶을때 아래와 같은 방법을 사용하면 된다. 우선 OnGetMinMaxInfo이 함수를 오버라이딩 해야한다. 윈도우 위자드에서 CMainFrame에서 오버라이딩 하면 된다. 단, 다이얼로그에서는 ClassWizard에서 아무리 찾아봐도 WM_GETMINMAXINFO라는 메세지를 찾을 수 없을 것이다. 그 이유는 메세지 필터가 다이얼로그로 되어있기 때문이다. 이는 ClassWizard에서 ClassInfo를 선택해서, Advanced options에 있는 메세지필터를 window로 설정 하고 찾아보면 된다. void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR *lpMMI) { // TODO: Add your message handler code here and/or call default LPMINMAXINFO lpminmax = (LPMINMAXINFO)lpMMI; //여기서 최소값을 정해주면 그 크기 이하로 줄지 않는다. lpminmax->ptMinTrackSize.x = 300; lpminmax->ptMinTrackSize.y = 300; //여기서 최대값을 정해주면 그 크기 이상으로 커지지 않는다. lpminmax->ptMaxTrackSize.x = 500; lpminmax->ptMaxTrackSize.y = 500; CDialog::OnGetMinMaxInfo(lpMMI); } 출처 : jytkm2님의 블로그 Trackback Address :: http://kongmks.cafe24.com/trackback/277
[폭주기관차, 2008/01/11 17:15, [Programming]/Visual C++ API/MFC]
함수에 가변인수를 주는 예제를 하나 작성해보았다.
#include <stdio.h>va_list : 데이터 타입으로 사용자가 입력한 값이 저장되는 공간입니다. va_start(va_list argptr, arg_data_type) : 2개의 인자를 받는 매크로입니다. va_arg(va_list argptr, T) : 다음 인자가 있을 경우 그 곳으로 이동하는 매크로입니다. va_end(va_list argptr) : 가변 인자 처리 끝났음을 알리는 매크로입니다. 출처 : 가변인수의 예제 Trackback Address :: http://kongmks.cafe24.com/trackback/274
[폭주기관차, 2008/01/10 00:40, [Programming]/Visual C++ API/MFC]
BHO 예제를 홈페이지에 쓴지 어언 1년이 다되갑니다~
BHO 간단한 예제 만들기 - 1 제가 작성한 이 글을 보고 저에게 질문을 주신분이 계셔서 저 스스로도 예제글을 보면서 그대로 따라 해봤는데 몇가지 안되는 점이 발견되어 이 곳에서 추가로 설명드리도록 하겠습니다^^ 우선 컴파일을 할때 함수 선언에러가 발생할 경우 StdAfx.h파일에 아래의 헤더 파일을 포함해주시면 되겠습니다. #include <exdisp.h> #include <exdispid.h> 그리고 Build 설정에 따라 익스플로워에 적용이 안되는 경우가 있는데 Build방식은 Win32Debug 혹은 Win32 Release MinSize 중에 하나로 하셔야 합니다. Unicode 방식은 사실 제가 테스트를 못해봤습니다^^;;; 안정우님께서 보내주신 문의 메일덕분에 오류를 수정하게 되었네요 감사합니다^^ 꼭 좋은 프로그램 만드시길 바랍니다^^ 추가로 실행 제대로 되는 예제 파일도 링크 해두겠습니다. 이 파일 링크는 무단으로 링크걸지 말아주세요.. 돈 내고 쓰는 계정인데 하루 트래픽 제한이 있답니다..^^;;; 그냥 파일을 받으신 다음에 따로 링크해주세요..^^;;;; Tester.zipBHO 예제 파일 Trackback Address :: http://kongmks.cafe24.com/trackback/273
[폭주기관차, 2007/12/20 22:52, [Programming]/Visual C++ API/MFC]
예외처리는 Java에서 처음 개념을 봤다.
VB에서의 ON ERROR GOTO ~ 처럼 에러가 나면 자동으로 그 분기로 점프하는건줄 알았는데 그거랑은 약간 달른 것이었다. 하지만 조금만 생각해보니 ON ERROR GOTO도 구현할 수 있을꺼 같았고 오히려 ON ERROR GOTO보다 더 유용할 뜻 보인다. (이전까지는 예외 처리가(try ~ catch가) 왜 있는지 몰랐다.) 우선 내가 그동안은 try ~ catch를 등한시 여기다가 갑자기 관심을 갖게 된 것은 필요한 곳을 찾았기 때문이다. 그동안 코딩을 하면서 메모리 누수가 발생해도 어쩌다가 발생한거니 그리 크게 생각 안하고 대충 프로그램 다시 실행하여서 오류 안나는 동작만 하곤 했다. 하지만 try ~ catch를 다시 곰곰히 보니 어떻게 써야 할지 알았다. char *pMem = (char *)malloc( 40 * sizeof( char ) );여기서 처럼 난 항상 if문으로 에러 났을 경우 상황을 대처하곤 했다. 그래도 별 문제는 없었다. 하지만 오늘 발생하고야 말았다. 그것은 if문으로 에러 처리를 할 경우 코드가 너무 방대해지고, 같은 코드를 계속 넣어야 한다는 것이다. if( pMem != NULL )프로그램 수행중 에러가 나고 함수에서 빠져 나갈때 잡았던 메모리를 풀어줘야 한다. 그런데 이 구문을 수행하지 않고 리턴을 하게 된다면, 처음에야 오류가 나지 않지만 나중에 가서 알 수 없게 오류가 발생하게 된다. 물론 코딩할때 신중하게 저 코드를 다 써준다면 괜찮지만, 문제는 귀차니즘과 유지보수에 있다. 저런 코드를 매번 삽입하는 번거로움은 둘째 치고, 만약 메모리 변수를 하나 더 선언하게 된다면? char *pTmp = (char *)malloc( 10 * sizeof( char ) );이 변수를 추가 한다면 return FALSE, return TRUE; 구문 전에 free(pTmp) 라는 구문을 더 추가 해줘야한다. 한 줄 뿐이겠지만, 나중에 코드가 복잡해진다면 일일이 찾아 넣기란 매우 번거롭고 헷갈릴 것이다. 이를 try ~ catch문으로 쉽게 해결 할 수 있게 되었다. < try ~ catch문의 간단한 이론 부분 보기 > - 클릭 중요한것은 try, catch, throw 우선 위의 예제부터 try ~ catch로 바꾸어 보자 char *pMem = (char *)malloc( 40 * sizeof( char ) );{ if( pMem != NULL )return bResult;이렇게 변할 것이다. 길이 상으론 오히려 더 복잡해 보인다. 하지만 프로젝트가 커질 수록 오히려 이런 방식이 유지보수하고, 오류 처리에 더 간단할 것이다. 그리고 try ~ catch에 관한 또 다른 예제문도 밑에 있다. 그냥 지나치기엔 안깝고도 자세한 설명이기에 그대로 긁어옴 (출처는 맨 밑에 표기 해뒀습니다) <좀더 자세한 예제 보기> 출처 : kv20님의 글 Trackback Address :: http://kongmks.cafe24.com/trackback/271
[폭주기관차, 2007/12/05 13:22, [Programming]/Visual C++ API/MFC]
한가지 이름의 함수에 여러가지 동작을 수행하게 할 수 있다.
아래와 같은 클래스가 있다고 보자 class class_A {A라는 클래스안에 test란 포인터형 함수가 있다. 지금까지 선언하던 함수랑은 살짝 다르다... 다음과 같은 경우를 보자. int *test(int a);이 함수의 세부 사항을 보면 함수이름 : test 매개변수 : int a 반환형식 : int * 이런 뜻이 된다. 그렇다면 아까와 같이 괄호를 치면 어떤 의미가 될 것인가. int (*test)(int a);함수이름 : *test 매개변수 : int a 반환형식 : int 그렇다 함수앞에 *(포인트)가 붙은 것이다. 그렇다면 이런 것을 어떻게 사용할까? 아래의 예제를 보자. int print_a( int a );출력결과는 a = 1 b = 2 어디에서 응용이 가능한가...? 클래스를 만들때 어떤 동작은 다른 개발자에게 넘겨주고 싶을 때가 있다. 이런 경우는 파생클래스를 만들어서 오버라이딩을 할 수도 있지만 함수 하나만 다른 개발자가 원하는 코드로 사용하게 하고 싶을 경우가 있다. 설명하기 힘드므로 아래와 같은 예를 보자 void 휴식( int 돈 )이런 함수가 있다. 휴식은 클래스를 만들때 정하지 않고 다른 프로그래머가 내 클래스 코드를 사용할때 따로 지정하여 사용하게 하고 싶다면 아래와 같이 선언을 한다. class 일상{이렇게 클래스를 선언해두면 다른 개발자가 '일상'이라는 클래스를 사용할때 굳이 파생클래스를 이용하지 않더라도 사용할 수가 있다. void 내휴식(int 돈)Trackback Address :: http://kongmks.cafe24.com/trackback/269
[폭주기관차, 2007/11/07 17:41, [Programming]/Visual C++ API/MFC]
아래와 같은 코드를 View클래스의 OnCreate 함수에 아래와 같은 글꼴 변수 함수를 수행하도록 한다.
void ChangeFont(CString strFont, int iFontSize)아마 이렇게 하면 한글은 제대로 나오는데 영문이 다른 글꼴(Arial), 혹은 영어/한글 모두 다른 글꼴로 나올 수도 있다. 그 이유는 RichEdit 2.0 이상부터는 자동으로 폰트를 변경해주는 옵션이 있기 때문이다. 아래와 같은 코드를 OnCreate맨위에 작성해주면 된다. //////////////////////////////////////////////////////////////////////////이게 왜 디폴트로 설정되어있는지 -_- 아무튼 5시간 넘은 삽질 끝에 겨우 완성^^ 출처 : 데브피아 답변 Trackback Address :: http://kongmks.cafe24.com/trackback/265
|
||








Tester.zip